package com.sykj.common;

import java.util.Arrays;
import java.util.List;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;


@Aspect//被<aop:aspectj-autoproxy/>这个标签识别
@Component//被<context:component-scan>标签扫描到
//自动载入spring管理器
public class LogAOP {
	//创建静态日志对象
	static Logger log = LoggerFactory.getLogger(LogAOP.class);
	/**
	 * 第一个*：任意方法的返回类型
	 * 第二个*：任意类名+Imp字符
	 * 第三个*：任意方法名
	 * 第四个..：任意数量的发法参数
	 * @param point 切入点
	 */
	/*@Before("execution(* com.sykj.service.*Imp.*(..))")*/
    public void beforeLog(JoinPoint point){
		log.debug("执行了前置拦截，调用了方法名："+point.getSignature().getName()+";参数有："+Arrays.toString(point.getArgs()));
	}
	/*@After("execution(* com.sykj.service.*Imp.*(..))")*/
    public void afterLog(JoinPoint point){
		log.debug("执行了后置拦截，调用了方法名："+point.getSignature().getName()+";参数有："+Arrays.toString(point.getArgs()));
	}
	/**
	 * 环绕通知
	 * @param joinPoint 切入点
	 * @throws Throwable
	 */
	/*@Around("execution(* com.sykj.service.*Imp.*(..))")*/
	public Object aroundLog(ProceedingJoinPoint point) throws Throwable{
		log.debug("执行了前置拦截，调用了方法名："+point.getSignature().getName()+";参数有："+Arrays.toString(point.getArgs()));
		Object proceed = point.proceed();//执行拦截的发法
		/*List<Cust> data = (List<Cust>) proceed;
		System.out.println(data+"============================");
		if (data!=null) {
			System.out.println(data.size()+"=========================");
			data.remove(data.size()-1);
			data.remove(data.size()-1);
		}*/
		log.debug("执行了后置拦截，调用了方法名："+point.getSignature().getName()+";参数有："+Arrays.toString(point.getArgs()));
		return proceed;
	}
}
